//
//  CZEmotion.swift
//  表情包数据
//
//  Created by youyoumacmini3 on 2017/8/7.
//  Copyright © 2017年 youyoumacmini3. All rights reserved.
//

import UIKit
import YYModel


/// 表情模型
class CZEmotion: NSObject {

    // 表情类型 - false:图片 / true:emoji
    var type = false
    
    /// 表情字符串，发送给新浪微博服务器（节约流量）
    var chs: String?
    
    /// 表情图片名称，用于本地图文混排
    var png: String?
    
    /// emoji 十六进制编码
    var code: String? {
        didSet{
            guard let code = code else {
                return
            }
            let scanner = Scanner(string: code)
            
            var result: UInt32 = 0
            scanner.scanHexInt32(&result)
            
            emoji = String(Character(UnicodeScalar(result)!))
                
        }
    }
    
    /// 表情使用次数
    var times: Int = 0
    
    
    /// emoji 字符串
    var emoji: String?
    
    
    
    /// 表情模型所在目录
    var directory: String?
    
    var image: UIImage? {
        // 图片表情对应的图像
        // 判断表情类型
        if type {
            return nil
        }
        guard let directory = directory,
              let png = png,
              let path = Bundle.main.path(forResource: "HMEmoticon.bundle", ofType: nil),
              let bundle = Bundle(path: path)
            else { return nil }
        return UIImage(named: "\(directory)/\(png)", in: bundle, compatibleWith: nil)
    }
    
    /// 将当前的图像转换成生成图片的属性文本
    func imageText(font: UIFont) -> NSAttributedString {
        
        // 1. 判断图像是否存在
        guard let image = image else {
            return NSAttributedString(string: "")
        }
        
        // 2. 创建文本附件
        let attchment = CZEmotionAttachment()
        // 记录属性文本文字
        attchment.chs = chs
        
        attchment.image = image
        let height = font.lineHeight
        attchment.bounds = CGRect(x: 0, y: -4, width: height, height: height)
        
        // 3. 返回图片属性文本
        let attrStrM = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attchment))
        
        // 设置字体属性
        attrStrM.addAttributes([NSFontAttributeName: font], range: NSRange(location: 0, length: 1))
        
        // 返回属性文本
        return attrStrM

    }
    
    
   override var description: String {
        return yy_modelDescription()
    }
    
    
}
